-- 优惠券id（从ARGV参数中获取，对应Java传入的voucherId）
local voucherId = ARGV[1]
-- 用户id（从ARGV参数中获取，对应Java传入的userId）
local userId = ARGV[2]
-- 订单ID（从ARGV参数中获取，对应Java传入的orderId）
local orderId = ARGV[3]

-- 定义Redis数据key
local stockKey = 'seckill:stock:' .. voucherId  -- 库存key：seckill:stock:优惠券ID
local orderKey = 'seckill:order:' .. voucherId  -- 下单用户集合key：seckill:order:优惠券ID

-- 1. 判断库存是否充足（核心修复：先获取库存并赋值给stock变量）
local stock = redis.call('get', stockKey)  -- 从Redis获取库存
-- 若库存key不存在（nil）或库存转换为数字后<=0，返回1表示库存不足
if not stock or tonumber(stock) <= 0 then
    return 1
end

-- 2. 判断用户是否已下单（修复命令拼写：sismemder → sismember）
if redis.call('sismember', orderKey, userId) == 1 then
    return 2  -- 返回2表示用户已下单，不允许重复购买
end

-- 3. 扣减库存（库存-1，原子操作）
redis.call('incrby', stockKey, -1)

-- 4. 记录用户下单（修复sadd参数：orderKey.userId → orderKey, userId）
redis.call('sadd', orderKey, userId)

-- 5. 发送订单消息到Redis Stream队列（供后续异步消费创建订单）
redis.call('xadd', 'stream.orders', '*', 'userId', userId, 'voucherId', voucherId, 'id', orderId)

-- 脚本执行成功，返回0
return 0